嗨!今天是第六天了,聖誕快樂啊!
上一篇開始,介紹了數據分析會使用到的幾個package,包含:
接下來會先從Pandas
開始講起,想看介紹的看上一篇:
[Day05]聊聊重要的三個package吧!
Pandas是一個基於Numpy的package,在處理數據方面非常的好用簡單,在學習pandas之前我們要先知道pandas的兩種特有的資料結構DataFrame
與Series
。
通常應該先介紹Numpy才對啦可是我比較喜歡Pandas有一種很多熊貓的感覺XD(?)
廢話不多說,我們開始吧!(let's go?)
首先我們先import pandas才可以使用它:
import pandas as pd
查看pandas的版本:
pd.__version__
Series,是一個類似陣列的物件,裡面可包含陣列的資料(Numpy之後會繼續做解釋),
最簡單的Series格式就是一個一維陣列的資料:
my_obj = pd.Series([4, 7, -5, 3])
在這裡我們宣告一個pandas的Series類型資料,非常簡單的使用.Series()
並將數值放到一個變數中。
若要讀取Series的value我們可以使用.values
:
my_obj.values
若要讀取Series的index
:
my_obj.index
Series的index若沒有自己設定的話它會自動分配!
my_obj.index
輸出:
RangeIndex(start=0, stop=4, step=1)
Index
可以不一定是要從0
開始也可以是其他的內容,我們可以這樣宣告:
my_obj2 = pd.Series([8,9,10,11], index=['a','b','c','d'])
則可以輸出:
idnex: Index(['a', 'b', 'c', 'd'], dtype='object')
values: [ 8 9 10 11]
所以如果我要取出8這個幸運數字該怎麼做呢?
my_obj2['a']
因為我們設定'a'
為index,所以只需要my_obj2['a']
就可以了,忘記的話趕快回去複習python的語法吧!pandas是基於python的程式庫,很多語法都是以python為基礎的。
如果想知道a
index在不在my_obj2裡面我們可以:
'a' in my_obj2
有的話,會回傳True
否則False
。
這就是前面所提到的最基本的一個Series格式,其實之前提到的dictionary也可以變成Series:
dic_data = {'name':'apple','birthday':'1996-1-1','luckynumber':7 }
這裡我們先宣告一個dictinary,接著轉成Series:
my_obj3 = pd.Series(dic_data)
輸出my_obj3:
birthday 1996-1-1
luckynumber 7
name apple
dtype: object
再來我們來看看它內部的資料型態吧!宣告一組布林的陣列再把它變成Series
registration = [True,False,True,True]
registration = pd.Series(registration)
registration
可以看到Out結果dtype
為bool
。
dictionary = {'A':'an animal',
'B':'a color',
'C':'a fruit'}
dictionary = pd.Series(dictionary)
dictionary
可以看到Out的dtype
為object
:
0 True
1 False
2 True
3 True
dtype: bool
DataFrame就像是我們在使用的excel表格一樣,是一個二維的數據有index
和column
,可以透過index和column來找到我們要的某一筆資料。
我們先定義一個資料,裡面包含name
、year
、month
、day
,接著將它轉成dataframe的格式並顯示:
data = {'name': ['Bob', 'Nancy','Amy','Elsa','Jack'],
'year': [1996, 1997, 1997, 1996, 1997],
'month': [8, 8, 7, 1, 12],
'day':[11,23,8,3,11]}
myframe = pd.DataFrame(data)
myframe
上面我們定義了一組數據data,並用.DataFrame()
將它轉成DataFrame。
DataFrame和Series一樣,若沒有特別定義index的話它會自動的分配。
name、year、month、day就是剛剛提到的columns,左邊的0到4就是index。
假如我要讓day在month後面怎麼辦呢?
myframe2 = pd.DataFrame(data,columns=['name','year', 'month', 'day'])
在函式內多一個columns的參數就可以了!
現在我們來定義新的frame,並在最後column下多加一個column。
myframe3 = pd.DataFrame(data,columns=['name','year', 'month', 'day','luckynumber'])
myframe3
就會看到NaN
,因為我們並沒有給它資料。
現在我們來給它資料吧!先定一一組幸運數字的資料:
luckynumber = ['3','2','1','7','8']
luckynumber = pd.Series(luckynumber)
接著把資料放到myframe3的luckynumber內:
myframe3['luckynumber'] = luckynumber
就可以看到資料被填滿了!
以上就是兩種Pandas的資料結構,接下來將會更深入的講解Pandas,敬請期待!
您好
在Series內部資料型態這個小標題底下
有一行
「可以看到Out的dtype為object:」
可是底下的圖片顯示為bool
希望這邊可以修改一下比較不會搞混